package com.qf.strategy.service.Impl;


import com.qf.strategy.feign.CacheService;
import com.qf.strategy.service.FilterChain;
import com.qf.strategy.utils.CheckMobileOperator;
import com.qianfeng.smsplatform.common.constants.CacheConstants;
import com.qianfeng.smsplatform.common.model.Standard_Submit;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import javax.annotation.Resource;
import java.util.zip.DataFormatException;

/**
 * Created by jackiechan on 2020-02-28 14:46
 * 号段补全的策略
 * 号段补全:根据手机号来将当前手机号属于什么运营商,属于什么省市地区,把这些信息保存起来,后面写入 es 的时候我们需要,以后用于统计用的
 *
 * @Author jackiechan
 */
@Service
public class SmsOpIDFilter implements FilterChain {
    private static final Logger LOGGER = LoggerFactory.getLogger(SmsOpIDFilter.class);

    @Resource
    private CacheService cacheService;

    @Override
    public boolean dealSms(Standard_Submit submit) throws DataFormatException {
        LOGGER.error("SmsOpIDFilter执行了");
        //如何判断运营商,前三位, 当然这里面我们排除掉了携号转网的影响

        //如何判断区域,中间四位是区域的 也就是前 7 位组成了运营商和区域
        //手机号的运营商 id 获取到了
        String mobile = submit.getDestMobile();
//        LOGGER.error("SmsOpIDFilter执行了接收到的数据是\n"+mobile);
        if (CheckMobileOperator.isChinaMobilePhoneNum(mobile)) {
            submit.setOperatorId(1);
        } else if (CheckMobileOperator.isChinaUnicomPhoneNum(mobile)) {
            submit.setOperatorId(2);
        } else {
            submit.setOperatorId(3);
        }
        //热门推荐怎么做,第一个问题什么叫热门?也就是你们的项目对热门的定义是什么,他的规则是什么,它是靠什么动作推动起来
        //比如是靠 点击? 浏览?购买?评论?  知道具体靠什么了,就应该知道如何区分
//我们的省市数据信息在 redis 中通过 hash 保存起来, key 和当前号码的前七位有关系,也就在前七位的基础上拼接了一个前缀
//        Map hmget = cacheService.hmget(CacheConstants.CACHE_PREFIX_PHASE + mobile.substring(0, 7));
//        if (hmget != null && hmget.size() > 0) {
//            submit.setProductID(Integer.parseInt(hmget.get("prov_id").toString()));
//            submit.setCityId(Integer.parseInt(hmget.get("city_id").toString()));
//        } else {
//            //代表没有数据
//            submit.setCityId(0);
//            submit.setProductID(0);
//        }

        String area = cacheService.get(CacheConstants.CACHE_PREFIX_PHASE + mobile.substring(0, 7));
//        LOGGER.error("所属区域是\n"+area);
        if (StringUtils.isEmpty(area)) {
            //代表没有数据
            submit.setCityId(0);
            submit.setProvinceId(0);
        }else{
            String[] areas = area.split(",");//因为我们保存的时候是以省&市的方式保存的,所以需要切割一下

            submit.setProvinceId(Integer.parseInt(areas[0]));
//            LOGGER.error("切割后的ProvinceId\n"+Integer.parseInt(areas[0]));
            submit.setCityId(Integer.parseInt(areas[1]));
//            LOGGER.error("切割后的CityId\n"+Integer.parseInt(areas[1]));
        }

        return true;
    }
}
